//package com.wiloon.java8x.dataImport;
//
//import com.wiloon.java8x.datadictionary.*;
//import org.apache.commons.lang3.StringUtils;
//import org.apache.poi.ss.util.CellRangeAddress;
//import org.apache.poi.xssf.usermodel.XSSFCell;
//import org.apache.poi.xssf.usermodel.XSSFRow;
//import org.apache.poi.xssf.usermodel.XSSFSheet;
//import org.apache.poi.xssf.usermodel.XSSFWorkbook;
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.stereotype.Service;
//
//import javax.transaction.Transactional;
//import java.io.FileInputStream;
//import java.io.FileNotFoundException;
//import java.io.IOException;
//import java.io.InputStream;
//import java.util.*;
//
///**
// * Created by Administrator on 2015/5/25.
// */
//
//@Service
//public class DataImportImpl implements DataImport {
//    private static Logger logger = LoggerFactory
//            .getLogger(DataImportImpl.class);
//    @Autowired
//    DictionaryDao dictionaryDao;
//
//    @Transactional
//    public void dataImport(DataImportTask dataImportTask) {
//        logger.debug("dataList import.");
//        //load excel and return map
//        List resultData = new ArrayList<>();
//        try {
//            InputStream is = new FileInputStream(dataImportTask.getSourceUrl());
//            XSSFWorkbook workbook = new XSSFWorkbook(is);
//            XSSFSheet sheet = workbook.getSheetAt(dataImportTask.getSourceSheetIndex());
//
//            int maxRow = sheet.getLastRowNum();
//            List<DataRow> dataList = new ArrayList();
//            for (int rowIndex = dataImportTask.getTitleRowIndex() + 1; rowIndex < maxRow; rowIndex++) {
//                XSSFRow row = sheet.getRow(rowIndex);
//                DataRow dataRow = new DataRowImpl();
//                for (ColumnMap columnMap : dataImportTask.getColumnMaping()) {
//                    int columnIndex = columnMap.getExcelColumn().getTargetColumnIndex();
//                    String value = getCellValue(sheet, rowIndex, columnIndex);
//                    DataCellString dataCell = new DataCellString(value);
//                    dataCell.setColumnMap(columnMap);
//                    dataRow.addDataCell(dataCell);
//                }
//
//                if (dataImportTask.getCreateById() > -1) {
//                    DataCellInt dataCellInt = new DataCellInt(dataImportTask.getCreateById());
//                    dataCellInt.setIgnoreValidation(true);
//                    dataCellInt.setColumnMap(new ColumnMap(-1, dataImportTask.getCreateByColumnKey()));
//                    dataRow.addDataCell(dataCellInt);
//                }
//
//                dataList = mulitValueHandller(dataList, dataRow);
//                dataList.add(dataRow);
//            }
//
//            dataList = removeDuplicateData(dataList);
//            dictionaryDao.insertDataSet(dataImportTask.getTargetTable(), dataList);
//        } catch (FileNotFoundException e) {
//            e.printStackTrace();
//        } catch (IOException e) {
//            e.printStackTrace();
//        }
//    }
//
//    private List<DataRow> mulitValueHandller(List<DataRow> data, DataRow dataRow) {
//        List<DataRow> dataRows = new ArrayList<>();
//        DataRow tmpRow = new DataRowImpl();
//        for (int i = 0; i < dataRow.size(); i++) {
//            DataCell dataCell = dataRow.getDataCell(i);
//            if (dataCell.isMultiValueCell()) {
//                tmpRow.addDataCell(new DataCellStringMultiValue(dataCell));
//            }
//        }
//        if (tmpRow.isMultiValueMatch()) {
//
//            for (int i = 0; i < tmpRow.getCellCount(); i++) {
//                DataRow newDataRow = new DataRowImpl();
//                for (int j = 0; j < tmpRow.getDataCells().size(); j++) {
//                    DataCellMultiValue dataCellMultiValue = (DataCellMultiValue) tmpRow.getDataCells().get(i);
//                    String value = dataCellMultiValue.getValue(i);
//                    DataCell newCell = new DataCellString(value);
//                }
//
////                for (DataCellMultiValue dataCell : tmpRow.getDataCells()) {
////                    String value = dataCell.getValue(i);
////                    DataCell newCell = new DataCellStringMultiValue(value);
////                }
//            }
//        }
//
//        int cellCount = -1;
////        for (String[] arr : tmpRow) {
////            cellCount = arr.length;
////        }
//        return null;
//    }
//
//    private String getCellValue(XSSFSheet sheet, int rowIndex, int columnIndex) {
//        String rtn = "";
//        if (isMergedRegion(sheet, rowIndex, columnIndex)) {
//            rtn = getMergedRegionValue(sheet, rowIndex, columnIndex);
//        } else {
//            rtn = getCellValue(sheet.getRow(rowIndex).getCell(columnIndex));
//        }
//        return rtn;
//    }
//
//    //remove duplicate dataList
//    private List<DataRow> removeDuplicateData(List<DataRow> dataList) {
//        logger.debug("removeDuplicateData.");
//        List<DataRow> returnList = new ArrayList<>();
//        List<String> tmpList = new ArrayList<>();
//        for (DataRow dataRow : dataList) {
//            boolean isEmptyRow = true;
//            StringBuffer sb = new StringBuffer();
//            for (int i = 0; i < dataRow.size(); i++) {
//                DataCell dataCell = dataRow.getDataCell(i);
//                sb.append(dataCell.toString());
//                if (!dataCell.isIgnoreValidation() && isEmptyRow && !isEmptyCell(dataCell)) {
//                    isEmptyRow = false;
//                }
//            }
//            if (isEmptyRow) continue;
//            if (tmpList.contains(sb.toString())) continue;
//            tmpList.add(sb.toString());
//            returnList.add(dataRow);
//        }
//        return returnList;
//    }
//
//    private boolean isEmptyCell(DataCell obj) {
//        if (obj instanceof DataCellString) {
//            if (StringUtils.isEmpty(String.valueOf(obj.toString()))) {
//                return true;
//            }
//        }
//        return false;
//    }
//
//    public boolean isMergedRegion(XSSFSheet sheet, int row, int column) {
//        int sheetMergeCount = sheet.getNumMergedRegions();
//
//        for (int i = 0; i < sheetMergeCount; i++) {
//            CellRangeAddress ca = sheet.getMergedRegion(i);
//            int firstColumn = ca.getFirstColumn();
//            int lastColumn = ca.getLastColumn();
//            int firstRow = ca.getFirstRow();
//            int lastRow = ca.getLastRow();
//
//            if (row >= firstRow && row <= lastRow) {
//                if (column >= firstColumn && column <= lastColumn) {
//
//                    return true;
//                }
//            }
//        }
//
//        return false;
//    }
//
//
//    public String getMergedRegionValue(XSSFSheet sheet, int row, int column) {
//        int sheetMergeCount = sheet.getNumMergedRegions();
//
//        for (int i = 0; i < sheetMergeCount; i++) {
//            CellRangeAddress ca = sheet.getMergedRegion(i);
//            int firstColumn = ca.getFirstColumn();
//            int lastColumn = ca.getLastColumn();
//            int firstRow = ca.getFirstRow();
//            int lastRow = ca.getLastRow();
//
//            if (row >= firstRow && row <= lastRow) {
//                if (column >= firstColumn && column <= lastColumn) {
//                    XSSFRow fRow = sheet.getRow(firstRow);
//                    XSSFCell fCell = fRow.getCell(firstColumn);
//                    return getCellValue(fCell);
//                }
//            }
//        }
//        return null;
//    }
//
//    public String getCellValue(XSSFCell cell) {
//
//        if (cell == null) return "";
//
//        if (cell.getCellType() == XSSFCell.CELL_TYPE_STRING) {
//
//            return cell.getStringCellValue();
//
//        } else if (cell.getCellType() == XSSFCell.CELL_TYPE_BOOLEAN) {
//
//            return String.valueOf(cell.getBooleanCellValue());
//
//        } else if (cell.getCellType() == XSSFCell.CELL_TYPE_FORMULA) {
//
//            return cell.getCellFormula();
//
//        } else if (cell.getCellType() == XSSFCell.CELL_TYPE_NUMERIC) {
//
//            return String.valueOf(cell.getNumericCellValue());
//
//        }
//
//        return "";
//    }
//
//
//}
